From 90759964ee945a207634c0de4d2fd78bfe16b047 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=B8ren=20Sandmann?= Date: Wed, 10 Sep 2008 10:22:25 +0000 Subject: [PATCH] Don't use XRRGetScreenResources() as there are performance issues with it. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Wed Sep 10 06:18:25 2008 Søren Sandmann * gdk/x11/gdkscreen-x11.c (init_multihead): Don't use XRRGetScreenResources() as there are performance issues with it. Instead rely on the fact that the RandR information is propagated through Xinerama as well. svn path=/trunk/; revision=21334 --- ChangeLog | 7 ++++ gdk/x11/gdkscreen-x11.c | 83 ++--------------------------------------- 2 files changed, 11 insertions(+), 79 deletions(-) diff --git a/ChangeLog b/ChangeLog index d6ce125704..2787355bb4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Wed Sep 10 06:18:25 2008 Søren Sandmann + + * gdk/x11/gdkscreen-x11.c (init_multihead): Don't use + XRRGetScreenResources() as there are performance issues with + it. Instead rely on the fact that the RandR information is + propagated through Xinerama as well. + 2008-09-09 Marek Kasik Bug 551386 – gtk_printer_set_is_default() always sets TRUE diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c index b5c52a6f63..6ba971445e 100644 --- a/gdk/x11/gdkscreen-x11.c +++ b/gdk/x11/gdkscreen-x11.c @@ -663,81 +663,6 @@ init_fake_xinerama (GdkScreen *screen) return FALSE; } -static gboolean -init_randr12 (GdkScreen *screen) -{ -#ifdef HAVE_RANDR - GdkDisplay *display = gdk_screen_get_display (screen); - GdkDisplayX11 *display_x11 = GDK_DISPLAY_X11 (display); - GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen); - Display *dpy = GDK_SCREEN_XDISPLAY (screen); - XRRScreenResources *resources; - int i; - GArray *monitors; - gboolean randr12_compat = FALSE; - - if (!display_x11->have_randr12) - return FALSE; - - resources = XRRGetScreenResources (screen_x11->xdisplay, - screen_x11->xroot_window); - if (!resources) - return FALSE; - - monitors = g_array_sized_new (FALSE, TRUE, sizeof (GdkX11Monitor), - resources->noutput); - - for (i = 0; i < resources->noutput; ++i) - { - XRROutputInfo *output = - XRRGetOutputInfo (dpy, resources, resources->outputs[i]); - - /* Non RandR1.2 X driver have output name "default" */ - randr12_compat |= !g_strcmp0(output->name, "default"); - - if (output->crtc) - { - GdkX11Monitor monitor; - XRRCrtcInfo *crtc = XRRGetCrtcInfo (dpy, resources, output->crtc); - - monitor.geometry.x = crtc->x; - monitor.geometry.y = crtc->y; - monitor.geometry.width = crtc->width; - monitor.geometry.height = crtc->height; - - /* FIXME: fill this out properly - need EDID parser */ - monitor.output = resources->outputs[i]; - monitor.width_mm = -1; - monitor.height_mm = -1; - monitor.output_name = NULL; - monitor.manufacturer = NULL; - - g_array_append_val (monitors, monitor); - - XRRFreeCrtcInfo (crtc); - } - - XRRFreeOutputInfo (output); - } - - XRRFreeScreenResources (resources); - - /* non RandR 1.2 X driver doesn't return any usable multihead data */ - if (randr12_compat) - { - g_array_free (monitors, TRUE); - return FALSE; - } - - screen_x11->n_monitors = monitors->len; - screen_x11->monitors = (GdkX11Monitor *)g_array_free (monitors, FALSE); - - return TRUE; -#endif - - return FALSE; -} - static gboolean init_solaris_xinerama (GdkScreen *screen) { @@ -861,14 +786,14 @@ init_multihead (GdkScreen *screen) * 3. Solaris Xinerama * 4. XFree86/Xorg Xinerama * - * We use them in that order. + * However, there are performance issues with calling + * XRRGetScreenResources() every time an application starts, + * so in the RandR case we simply rely on the information being + * exported through Xinerama as well. */ if (init_fake_xinerama (screen)) return; - if (init_randr12 (screen)) - return; - if (XQueryExtension (GDK_SCREEN_XDISPLAY (screen), "XINERAMA", &opcode, &firstevent, &firsterror)) { -- 2.30.2